// package Middleware
// //
// //import (
// //	"github.com/gin-gonic/gin"
// //)
// //
// //func InitAdminAuthMiddleware(c *gin.Context) {
// //	//判断权限，没有权限的用户不允许访问后台，只允许访问到登录页面
// //	//	1、获取用户访问的RL地址
// //	//	2、获取session里面保存的用户信息
// //	//	3、判断session中的用户信息是否存在，如果不存在跳转到登录页面（如果在登录页面就不跳转）
// //	//	4、如果session不存在，判断当前访问的URL是否是login dologin cpatcha，如果不是
// //	//pathname := strings.Split(c.Request.URL.String(), "?")[0]
// //	//session := sessions.Default(c)
// //	//userinfo := session.Get("userinfo")
// //	//userinfoStr, ok := userinfo.(string)
// //	//if !ok {
// //	//	//	判断userinfo里面的信息是否存在
// //	//	var userinfoStruct []Models.Manager
// //	//	err := json.Unmarshal([]byte(userinfoStr), &userinfoStruct)
// //	//	if err != nil || !(len(userinfoStruct) > 0 && userinfoStruct[0].Username != "") {
// //	//		if pathname != "/admin/login" && pathname != "/admin/doLogin" && pathname != "/admin/captcha" {
// //	//			c.Redirect(302, "/admin/login")
// //	//		}
// //	//	}
// //	//} else {
// //	//	//	用户没有登录,跳转到登录页面，需要排除掉不需要权限的页面
// //	//	if pathname != "/admin/login" && pathname != "/admin/doLogin" && pathname != "/admin/captcha" {
// //	//		c.Redirect(302, "/admin/login")
// //	//	}
// //	//}
// //
// //}
package Middleware

import (
	"encoding/json"
	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
	"syudy/Models"
)

func InitAdminAuthMiddleware(c *gin.Context) {
	// 1. 获取当前访问路径（更推荐使用 URL.Path）
	pathname := c.Request.URL.Path

	// 2. 免鉴权路径直接放行
	if pathname == "/admin/login" ||
		pathname == "/admin/doLogin" ||
		pathname == "/admin/captcha" {
		c.Next()
		return
	}

	// 3. 检查 session
	session := sessions.Default(c)
	userinfo := session.Get("userinfo")

	// 4. 未登录情况处理
	if userinfo == nil {
		c.Redirect(302, "/admin/login")
		return
	}

	// 5. 类型断言（假设 userinfo 存的是 JSON 字符串）
	userinfoStr, ok := userinfo.(string)
	if !ok {
		c.Redirect(302, "/admin/login")
		return
	}

	// 6. 解析用户信息
	var userStruct []Models.Manager
	if err := json.Unmarshal([]byte(userinfoStr), &userStruct); err != nil {
		c.Redirect(302, "/admin/login")
		return
	}

	// 7. 验证用户数据有效性
	if len(userStruct) == 0 || userStruct[0].Username == "" {
		c.Redirect(302, "/admin/login")
		return
	}

	// 8. 验证通过，继续后续处理
	c.Next()
}
